/*
 * 绑定
 * 在`match`中，若间接地访问一个变量，则不经过重新绑定就无法在分支中再使用它。
 * `match`提供了`@`符号来绑定变量到名称
 */
// `age`函数，返回一个`u32`
fn age() -> u32 {
    15
}

fn some_number() -> Option<u32> {
    Some(43)
}

fn main() {
    println!("Tell me what type of person you are");

    match age() {
        0 => println!("baby"),
        // 在1 ..= 12 分支中绑定匹配值到`n`，现在年龄就可以读取
        n @ 1 ..= 12 => println!("child of age {:?}", n),
        n @ 13 ..= 19 => println!("teen of age {:?}", n),
        n => println!("old person of age {:?}", n),
    }

    // 可以用绑定来`解构`enum 变体，如`Option`
    match some_number() {
        // 得到`Some`可变类型，如果它的值(绑定到`n`上)等于43,则匹配
        Some(n @ 43) => println!("answer: {}", n),
        // 匹配任何其他数字
        Some(n) => println!("Not interesting {}", n),
        // 匹配任意其他值(`None`可变类型)
        _ => (),
    }
}